/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vue;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.JPanel;
import model.Carte;
import model.CarteDefensive;
import model.CarteOffensive;
import model.Pile;

/**
 *
 *
 * Classe qui permet d'afficher les cartes au sein des vues. Une carte dans la
 * main et sur le terrain si on l'instancie avec une carte et ses
 * coordonnées(pour le terrain). Dans l'écran de séléction en noir si on
 * l'instancie avec seulement ses coordonnées Les corbeilles si on l'instancie
 * avec un string "corbeille" et ses coordonnées. Les decks si on l'instancie
 * avec un string "deck" et ses coordonnées
 *
 * @author Antoine Thorr, Joana Santos, Samy Rida, Vicky Ngo Pagbe
 */
public class Carte_vue extends JPanel {

    //Ce sont des coordonnées relative au grid layout
    private int x;
    private int y;

    private Color color;
    private Carte carte;
    private String type;
    private Pile pile;

    /**
     * Constructeur de la vue d'une Carte
     *
     * @param x Position x de la Carte
     * @param y Position y de la Carte
     * @param c Carte dont ce sera la vue
     */
    public Carte_vue(int x, int y, Carte c) {
        this.x = x + 5;
        this.y = y + 5;
        this.carte = c;
        this.color = c.getC();
        this.type = "carte";
    }

    /**
     * Constructeur de la vue d'une Carte
     *
     * @param x Position x de la Carte
     * @param y Position y de la Carte
     */
    public Carte_vue(int x, int y) {
        this.x = x + 5;
        this.y = y + 5;
        this.type = "empty";
        this.color = new Color(54, 47, 45);
    }

    /**
     * Constructeur de la vue d'une Carte de Type Deck et Corbeille
     *
     * @param x Position x de la Carte
     * @param y Position y de la Carte
     * @param type Type de la vue
     * @param p Pile Correspondant à la vue
     */
    public Carte_vue(int x, int y, String type, Pile p) {
        this.x = x + 5;
        this.y = y + 5;
        if (type.equals("deck")) {
            this.color = new Color(0, 94, 32);
        }
        if (type.equals("corbeille")) {
            this.color = new Color(160, 65, 13);
        }
        this.type = type;
        this.pile = p;
    }

    /**
     * Dessine automatiquement l'image de la carte dès son instanciation
     *
     * @param g
     */
    @Override
    public void paintComponent(Graphics g) {
        g.setColor(color);
        g.fillRoundRect(x, y, 70, 90, 5, 5);
        g.setColor(Color.white);
        g.drawString(this.type, x + 5, y + 20);
        if (this.type.equals("carte")) {
            g.drawString(this.getCarte().getNom(), x + 5, y + 35);
            if (getCarte().getAttitude().equals("offensive")) {
                CarteOffensive co = (CarteOffensive) this.getCarte();
                g.drawString("ATK : " + co.getPointAttaque(), x + 5, y + 50);
                g.drawString("VIE : " + co.getVie(), x + 5, y + 65);
                g.drawString("" + co.getEtat(), x + 5, y + 80);
            } else {
                CarteDefensive cd = (CarteDefensive) this.getCarte();
                g.drawString("DEF : " + cd.getVie(), x + 5, y + 50);
                g.drawString("CTR : " + cd.getPointContre(), x + 5, y + 65);
            }
            g.setColor(Color.white);
            for (int i = 1; i <= this.getCarte().getCout(); i++) {
                g.fillOval(x + 60, 6 * i, 5, 5);
            }
        } else if (this.type.equals("deck") || this.type.equals("corbeille")) {
            g.drawString(pile.taille() + " carte(s)", x + 5, y + 35);
        }

    }

    /**
     * Rédéfinition de la méthode toString
     *
     * @return
     */
    @Override
    public String toString() {
        return "clique : x :" + this.getX() + " y :" + this.getY() + " faux x :" + this.x + " faux y :" + this.y + " ";
    }

    /**
     * Retourne la Carte présente dans la vue.
     *
     * @return Carte
     */
    public Carte getCarte() {
        return this.carte;
    }

    /**
     * Retourne le Type dans le Cas de la corbeille et le Deck
     *
     * @return Type
     */
    public String getType() {
        return type;
    }

    /**
     * Retourne si la carte est présente à la position indiqué
     *
     * @param x Position x indiquée
     * @param y Position y indiquée
     * @return
     */
    public boolean isInside(int x, int y) {
        if (x >= this.getX() && x <= this.getX() + 107) {
            if (y >= this.getY() && y <= this.getY() + 159) {
                return true;
            }
        }
        return false;
    }

}
